#ifndef	__IENTITY_H__
#define	__IENTITY_H__

#include "SmartPointer.h"
#include "SceneModel/RuntimeClass.h"

namespace GCRE {
	namespace SceneModel {
		typedef SmartPointer<IEntity> EntityPtr;
		class IEntity {
			public:
				virtual ~IEntity();

				BasicType::SFBool IsKindOf( const RuntimeClass* pClass ) const;
				virtual RuntimeClass* GetRuntimeClass() const;
				static RuntimeClass classIEntity;
				static BasicType::SFUInt m_numEntity;

				void SetName( const BasicType::SFString& name );
				const BasicType::SFString& GetName() const;
				BasicType::SFUInt GetID() const;

			protected:
				IEntity();

				BasicType::SFString m_Name;
				BasicType::SFUInt m_ID;

			private:
				
		};

		inline const BasicType::SFString& IEntity::GetName() const { return m_Name; }
		inline void IEntity::SetName( const BasicType::SFString& name ) { m_Name = name; }
		inline BasicType::SFUInt IEntity::GetID() const { return m_ID; }

	}
}

#endif	//	__IENTITY_H__